"""
lambda表达式创建匿名函数
主体没有函数中的代码块那么复杂，仅仅是一个表达式（只包含一个语句）

语法：
lambda 参数表列表：表达式（返回值）
1）参数：4种类型（函数中的参数在lambda表达式中都适用）
2）返回值：只能是1个：如果有多个
"""


def fun1(a, b):
    return a + b


fun2 = lambda a, b: a + b
print(fun1(3, 6))


def fun3(a, b):
    return a, b


r3 = fun3(3, 9)
print(r3)

# lambda 只能返回一个，多个用元组
fun4 = lambda a, b: (a, b)

sum2 = lambda a, b, c=100: a + b + c
print(sum2(20, 30))
print(sum2(20, 30, 200))

fn1 = lambda *args: args
print(fn1(2, 3, 5))

fn2 = lambda **kwargs: kwargs
print(fn2(name='tom', age=18))

fun5 = lambda a, b: a if a >= b else b
print(f'较大值是：{fun5(3, 5)}')

students = [
    {'name': 'TOM', 'age': 20},
    {'name': 'A', 'age': 20},
    {'name': 'ROSE', 'age': 19},
    {'name': 'Jack', 'age': 22}
]
# 按name值升序排列
# sort(key,reverse):key根据哪个关键字排序，reverse是bool，表示升序/降序
# 默认是升序，若要降序 reverse =True
students.sort(key=lambda x: x['name'])
print(students)

# sorted():ctrl+p查看有哪些参数
# help(sorted)查看说明
# sorted 返回一个新列表，不改变原来的
a = sorted(students, key=lambda x: x['age'], reverse=True)
print(a)
# 先按age值降序排列，如果age一样在按name排序
print(sorted(students, key=lambda x: (x['age'], x['name'])))

dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 3, 'f': 1, 'g': 7}
# 按value排列
print(sorted(dict1.items(), key=lambda x: x[1]))
# 先按value降序排序，value一样再key排列
print(sorted(dict1.items(), key=lambda x: (x[1],x[0]),reverse=True))